// 在编译后的 CSS 文件中，单行注释将被忽略

/* 多行注释会保留 */

/* 引入数学模块，使用其中的 math.div() 函数 */
@use 'sass:math';

/* 变量
========== */

/* 可以使用 '$' 符号创建变量，存储 CSS 值（比如颜色） */
$primary-color: #a3a4ff;
$secondary-color: #51527f;
$body-font: 'Roboto', sans-serif;

/* 可以在整个样式表中使用变量。
当你需要调整颜色，只需要改动一处。 */
body {
    background-color: $primary-color;
    color: $secondary-color;
    font-family: $body-font;
}

/* 控制指令
========== */

/* Sass 的 @if, @else, @for, @while 和 @each 可以控制编译逻辑 */

/* @if/@else 条件语句 */

$debug: true !default;
@mixin debugmode {
    @if $debug {
        @debug 'Debug mode enabled';
        display: inline-block;
    } @else {
        display: none;
    }
}

.info {
    @include debugmode;
}

/* @for 循环可以遍历数值集合。有两种格式："through" 和 "to"，
前者包含结束值，后者不含结束值 */
@for $c from 1 to 4 {
    div:nth-of-type(#{$c}) {
        left: math.div(($c - 1) * 900, 3);
    }
}

@for $c from 1 through 3 {
    .myclass-#{$c} {
        $channel: math.div($c * 255, 3);
        color: rgb($channel, $channel, $channel);
    }
}

/* @while 循环 */
$columns: 4;
$column-width: 80px;

@while $columns > 0 {
    .col-#{$columns} {
        width: $column-width;
        left: $column-width * ($columns - 1);
    }

    $columns: $columns - 1;
}

/* @each 函数类似 @for 指令，只是使用了一个列表。列表以空格分隔 */
$social-links: facebook twitter linkedin reddit;

.social-links {
    @each $sm in $social-links {
        .icon-#{$sm} {
            background-image: url('images/#{$sm}.png');
        }
    }
}

/* Mixins
========== */

/* 如果你发现同样的元素经常重复出现，可以考虑用 mixin 简化写法

使用 @mixin 指令，后面跟着 mixin 名*/

@mixin center {
    display: block;
    margin-left: auto;
    margin-right: auto;
    left: 0;
    right: 0;
}

/* 使用 @include 导入 mixin */
div {
    @include center;
    background-color: $primary-color;
}

/* 可以使用 mixin 简化属性写法 */
@mixin size($width, $height) {
    width: $width;
    height: $height;
}

/* 使用时传入宽高尺寸即可 */
.rectangle {
    @include size(100px, 60px);
}

.square {
    @include size(40px, 40px);
}

/* 除了传递参数，还可使用 '@content' 传递整个代码块 */
@mixin hover {
    &:not([disabled]):hover {
        @content;
    }
}

.button {
    border: 1px solid black;
    @include hover {
        border-width: 2px;
    }
}

/* 函数
========== */

/* Sass 提供了一些函数，比如下面的 round() 和 fade_out() */
body {
    width: round(10.25px);
}

.footer {
    background-color: fade_out(#000000, 0.25);
}

/* 也可以自定义函数。函数和 mixin 看着很像。当不清楚选择函数，
或是 mixin 时，记住 mixin 通常用于生成 CSS 代码，而函数通常
用于逻辑复用 */

/* 如下函数会根据目标尺寸和父元素尺寸，计算得到百分比 */
@function calculate-percentage($target-size, $parent-size) {
    @return math.div($target-size, $parent-size) * 100%;
}

$main-content: calculate-percentage(600px, 960px);

.main-content {
    width: $main-content;
}

.sidebar {
    width: calculate-percentage(300px, 960px);
}

/* 扩展（继承）
=============== */

/* 通过扩展，可以在两个选择符间共享属性 */

.display {
    @include size(5em, 5em);
    border: 5px solid $secondary-color;
}

.display-success {
    @extend .display;
    border-color: #22df56;
}

/* 通常认为扩展优于 mixnin，因为扩展生成的代码更紧凑 */

/* 嵌套
========== */

ul {
    list-style-type: none;
    margin-top: 2em;

    li {
        background-color: #ff0000;

        &:hover {
            background-color: blue;
        }

        a {
            color: white;
        }
    }
}

/* 片段和导入
=============== */

/* Sass 允许你创建片段文件。可以帮助你保持 Sass 代码模块化。片段
文件应该以 '_' 开头，比如 _reset.css。 */

html,
body,
ul,
ol {
    margin: 0;
    padding: 0;
}

/* Sass 提供的 @import 指令，可以导入其他片段文件，合并为一个文件 */
@import 'reset';

body {
    font-size: 16px;
    font-family: Helvetica, Arial, Sans-serif;
}

/* 占位符选择器
=============== */

/* 占位符选择器以 '%' 开头，通常与扩展 @extend 结合。
占位符选择器不会出现最终的 CSS 中 */
%content-window {
    font-size: 14px;
    padding: 10px;
    color: #000;
    border-radius: 4px;
}

.message-window {
    @extend %content-window;
    background-color: #0000ff;
}
